% 加载.mat文件
data = load('my_signal_with_noise5.mat'); % 将'your_file.mat'替换为你的.mat文件名

% 显示文件中的变量
disp('文件中的变量:');
whos
  
% 提取变量
fs = 192000; % 采样频率
t = data.t; % 时间向量
signal_noisy = data.signal_noisy; % 含有噪声的信号

% 设计一个低通滤波器去除高频噪声
fc = 1000; % 截止频率，根据实际信号选择合适的值
[b, a] = butter(8, fc / (fs/2), 'low'); % 4阶低通滤波器

% 应用滤波器
signal_filtered = filtfilt(b, a, signal_noisy);

% 应用希尔伯特变换
analytic_signal = hilbert(signal_filtered);
amplitude_envelope = abs(analytic_signal); % 幅度包络
instantaneous_phase = unwrap(angle(analytic_signal)); % 瞬时相位
instantaneous_frequency = diff(instantaneous_phase) / (2*pi) * fs; % 瞬时频率

% 绘制原始信号、滤波后的信号和处理后的信号
figure;

signal=data.signal;
% 原始含噪声信号
subplot(4,1,1);
plot(t, signal_noisy);
title('原始信号');
xlabel('时间 (s)');
ylabel('幅度');

% 滤波后的信号
subplot(4,1,2);
plot(t, signal_filtered,'r');
hold on;
plot(t, signal,'b');
hold off;
title('信号对比，红色为处理后信号，蓝色为原本信号');
xlabel('时间 (s)');
ylabel('幅度');

% 信号的幅度包络
subplot(4,1,3);
plot(t, amplitude_envelope);
title('信号的幅度包络');
xlabel('时间 (s)');
ylabel('幅度');

% 瞬时频率
subplot(4,1,4);
plot(t(2:end), instantaneous_frequency);
title('瞬时频率');
xlabel('时间 (s)');
ylabel('频率 (Hz)');

% 输出处理后的信号的频率、相位和函数关系
disp('处理后的信号的一些特征:');
disp(['最大瞬时频率: ', num2str(max(instantaneous_frequency))]);
disp(['最小瞬时频率: ', num2str(min(instantaneous_frequency))]);
disp(['初始相位: ', num2str(instantaneous_phase(1))]);